package cn.ibdsr.human.transfer;


import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * @author chenglx
 * @version V1.0
 * @description
 * @createDate 2020-02-28 14:21
 * <p>
 * Date Author Description
 * ------------------------------------------------------
 * 2020-02-28 chenglx init
 */

@ApiModel(value = "用户DTO")
@Data
public class UserDTO implements Serializable, Comparable<UserDTO> {

    private static final long serialVersionUID = 2215940516415774034L;
    /**
     * 主键，用户ID（不对外）
     */
    @ApiModelProperty(value = "id主键")
    private Long id;

    /**
     * 用于前端展示的用户ID（对外）
     */
    @ApiModelProperty(value = "用于前端展示的用户ID")
    private String displayId;
    /**
     * 用户名称
     */
    @ApiModelProperty(value = "用户名称")
    private String name;
    /**
     * 用户头像URL
     */
    @ApiModelProperty(value = "用户头像URL")
    private String avatarUrl;
    /**
     * 用户个性签名
     */
    @ApiModelProperty(value = "用户个性签名")
    private String signature;
    /**
     * 手机号码
     */
    @ApiModelProperty(value = "手机号码")
    private String phoneNumber;
    /**
     * 文章数
     */
    @ApiModelProperty(value = "文章数")
    private Integer articleCount;


    /**
     * 收藏数
     */
    @ApiModelProperty(value = "收藏数")
    private Integer favoriteCount;

    /**
     * 草稿数
     */
    @ApiModelProperty(value = "草稿数")
    private Integer draftCount;
    /**
     * 返回的用户状态：1正常 2已冻结
     * 冻结用户时传入：1解冻（变成正常状态） 2冻结（变成已冻结状态）
     */
    @ApiModelProperty(value = "1正常 2已冻结")
    private Byte status;

    @ApiModelProperty(value = "状态描述：已冻结")
    private String statusDes;
    /**
     * 访问者是否为当前数据的主人：true是，false否
     */
    @ApiModelProperty(value = "访问者是否为当前数据的主人：true是，false否")
    private Boolean visitorData;
    /**
     * 访问者与当前数据用户的关系：1 访问者关注当前数据用户，2 当前数据用户关注访问者，3 互相关注，4 无关联
     */
    @ApiModelProperty(value = "访问者与当前数据用户的关系：1 访问者关注当前数据用户，2 当前数据用户关注访问者，3 互相关注，4 无关联")
    private Byte relation;
    /**
     * 注册时间
     */
    @ApiModelProperty(value = "注册时间")
    private String createTime;



    /**
     * 是否被勾选过（仅用于用户好友列表接口，前端使用）
     */
    @ApiModelProperty(value = "是否被勾选过（仅用于用户好友列表接口，前端使用）")
    private Boolean checked;

    /**
     * 是否为新人（通过token认证时返回）
     */
    @ApiModelProperty(value = "是否为新人（通过token认证时返回）")
    private Boolean fresh;

    /**
     * 用户是否在认证中心绑定了手机号
     */
    @ApiModelProperty(value = "用户是否在认证中心绑定了手机号")
    private Boolean phoneBound;


    /*******以下3个字段，用于客户端授权手机号之后，更新数据库中的用户手机号数据********/
    /**
     * 用户的 Session ID
     */
    @ApiModelProperty(value = "更新手机号：用户的 Session ID")
    private String sessionId;
    /**
     * AES算法初始向量
     */
    @ApiModelProperty(value = "更新手机号：AES算法初始向量")
    private String wxInitialVector;
    /**
     * 微信返回的加密数据
     */
    @ApiModelProperty(value = "更新手机号：加密后的用户数据")
    private String wxEncryptedData;


    /**
     * 根据name(用户名)中文拼音首字母排序
     */
    @Override
    public int compareTo(UserDTO o) {
        return this.name.compareTo(o.getName());
    }

    /**
     * 用于List.contains()方法使用
     * @param obj
     * @return
     */
    @Override
    public boolean equals(Object obj) {
        if (obj == null || !(obj instanceof UserDTO)) {
            return false;
        }
        return this.id.equals(((UserDTO) obj).getId());
    }
}
